// pages/campSuperMarket/campSuperMarket.js
import Dialog from '@vant/weapp/dialog/dialog';
const api = require("../../api/index")
const camp = require("../../api/camp")
const {
  baseURL
} = require("../../utils/request")

Page({

  /**
   * 页面的初始数据
   */
  data: {
    activeKey: 0,
    oss_url: baseURL, // 图片地址
    campList: [], // 存放侧边栏已预约营地数据
    SuperMarketList: [], // 商品列表数据
    cartList: [], // 加入购物车中的数量
    totalPrice: 0, // 订单初始值 0
    productId: "",
    productName: "", //商品名称
    productPrice: "", //商品价格
    productDetails: "", //商品详情
    imageUrl: "", //图片
    userId: "",
    qrcode: "0",
    productNumber: "",
    campId: "",
    campName: "",
    totalPrice: "",
    state: 0, //状态
    cartPopupShow: false, // 初始时购物车弹窗为隐藏状态
    right: "65", // 设置滑动时的宽度
    show: false, // 二维码弹窗
    orderId: "", // 订单ID弹出二维码
  },

  getAppointmentCampList() {
    camp.getAppointmentByUserId(wx.getStorageSync('userInfo').userId).then(res => {
      //  console.log("getAppointmentCampList res", res)
      if (wx.getStorageSync('userInfo').userId == undefined) {
        wx.showToast({
          title: '未登录',
          duration: 800
        })
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/my/my',
          })
        }, 1500)
      } else if (res.code == 200) {
        this.setData({
          campList: res.data
        })
      } else if (res.data.length < 0) {
        return;
      }
      // 每次刚进页面获取第一个营地ID，营地Name，营地图片
      let campId = res.data[0].campId;
      let campName = res.data[0].campName;
      let imageUrl = res.data[0].imageUrl;
      // 每次刚进页面时 赋值一次
      this.setData({
        campId: campId,
        campName: campName,
        imageUrl: imageUrl
      });
      this.getSuperMarketInfo(campId)
      this.setCartList()
    })
  },

  // 获取商品列表
  getSuperMarketInfo(campId) {
    api.getSuperMarket(campId).then(res => {
      // console.log("api.getSuperMarket({campId: campId}).then(res)", res)
      // console.log("res.code", res.code)
      if (res.code == 200 && res.data) {
        this.setData({
          SuperMarketList: res.data
        })
      }
      // console.log( "SuperMarketList:", this.data.SuperMarketList);
      // console.log( "res.data：", res.data);
      // console.log("商品列表Product：", res);
    })
  },

  // 加入购物车数据
  onImageClick(event) {
    // 在这里可以添加点击图片后的具体逻辑，比如跳转到图片详情页、执行某个操作等
    // console.log('点击了class e中的图片', event);
    const currentGood = this.data.SuperMarketList[event.currentTarget.dataset.index];
    if (currentGood) {
      // 将商品信息添加到购物车数据列表
      console.log("this.data.cartList:", this.data.cartList)
      const cartList = this.data.cartList || [];
      cartList.push(currentGood);
      this.setData({
        cartList
      });
      console.log('已将商品加入购物车', cartList.length);
    }

    let total = 0;
    // 获取 当前选中的数据的值
    // 计算购物车商品总价的,循环数组 cartList 数据
    this.data.cartList.forEach(item => {
      total += item.productPrice;
    });
    // 将获取的值 设置到全局
    this.setData({
      totalPrice: total
    });
    wx.setStorageSync('cartList-' + this.data.campId, this.data.cartList)
  },

  // 取消某个购物车的商品
  delLeaseProduct(event) {
    // console.log("event", event)
    let productId = event.currentTarget.dataset.index;
    // 从 cartList 中找到对应 productId 的商品索引
    const indexToRemove = this.data.cartList.findIndex(item => item.productId === productId);
    if (indexToRemove !== -1) {
      // 如果找到了对应的商品索引，就从 cartList 中移除该商品
      const updatedCartList = [...this.data.cartList];
      updatedCartList.splice(indexToRemove, 1);
      this.setData({
        cartList: updatedCartList
      });
      // 添加成功提示弹窗，告知用户商品已取消
      wx.showToast({
        title: '商品已取消',
        icon: 'success',
        duration: 2000
      });
    }
  },

  // 添加取消回调函数，当用户点击取消时执行，这里可以不做任何操作或者添加一些提示等逻辑
  onCancel: () => {
    console.log("用户取消了取消订单操作");
    // 例如可以添加一个提示，告知用户已取消取消操作（可选）
    wx.showToast({
      title: '已取消取消订单操作',
      icon: 'none',
      duration: 1500
    });
  },

  // 去结算 跳转到租赁页面的点击事件处理函数
  goToCheckout() {
    console.log("goToCheckout this.data.cartList：", this.data.cartList)
    if (this.data.cartList.length === 0) {
      return; // 如果购物车为空，直接返回，不进行后续操作
    }
    // 构造要发送给后端的订单数据格式，根据后端接口要求进行调整
    const orderData = {
      cartList: this.data.cartList.map(item => {
        return {
          productId: item.productId,
          productName: item.productName,
          productPrice: item.productPrice,
          productDetails: item.productDetails,
          imageUrl: item.imageUrl,
          userId: item.userId,
          campId: item.campId,
          campName: item.campName,
          qrcode: "0",
          productNumber: this.data.cartList.length / this.data.cartList.length,
          totalPrice: this.data.totalPrice,
          // 可以添加其他必要的订单相关信息，比如用户ID（假设已存储在userInfo中）等，以下是简单示例获取用户ID
          userId: wx.getStorageSync('userInfo').userId || '',
          // 根据后端接口要求，可能还需要添加其他通用的订单属性，比如下单时间等，这里可参考后端接口文档添加
          leaseOrderTime: new Date()
        };
      }),
      userId: wx.getStorageSync('userInfo').userId || '',
      imageUrl: this.data.imageUrl,
      campId: this.data.campId,
      campName: this.data.campName,
      totalPrice: this.data.totalPrice,
    };
    // console.log("addleaseOrder(orderData)",  camp.addleaseOrder(orderData))
    // 调用后端接口发送数据
    camp.addleaseOrder(orderData).then(res => {
      // console.log('后端接口响应：', res);
      // console.log('后端接口响应res.code：', res.code);
      if (res.code === 200) {
        // 假设后端接口返回的响应数据中，code为200表示添加成功
        // 这里可以添加跳转到结算页面或者订单详情页面等后续操作，使用wx.switchTab，2秒后，跳转
        wx.showToast({
          title: '加入购物车成功,正在前往购物车！',
          icon: 'none'
        });
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/leaseOrder/leaseOrder',
          })
        }, 2000)
      } else {
        wx.showToast({
          title: '结算失败，' + res.data.message,
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('请求后端接口失败：', err);
      wx.showToast({
        title: '结算失败，请稍后再试',
        icon: 'none'
      });
    });
  },

  onChange(event) {
    // console.log('event', event);
    // 每次切换标签时 赋值 setData方法
    let campId = this.data.campList[event.detail].campId;
    let campName = this.data.campList[event.detail].campName;
    let imageUrl = this.data.campList[event.detail].imageUrl;
    // 给全局设置 显示每个商店对应的商品
    this.setData({
      campId: campId,
      campName: campName,
      imageUrl: imageUrl
    });
    var cartList = wx.getStorageSync('cartList-' + this.data.campId)
    // 清空购物车数据，通过设置空数组给cartList，并使用setData更新数据
    if (cartList && cartList.length > 0) {
      this.setData({
        cartList: cartList
      })
    } else {
      this.setData({
        cartList: []
      })
    }
    this.getSuperMarketInfo(campId)
  },

  // 从本地存储中查询购物车数据
  setCartList() {
    var cartList = wx.getStorageSync('cartList-' + this.data.campId)
    if (cartList && cartList.length > 0) {
      this.setData({
        cartList: cartList
      })
    } else {
      this.setData({
        cartList: []
      })
    }
    this.setSuperMarketListNum();
  },

  // 设置商品已经加入购物车的数量
  setSuperMarketListNum() {
    var cartList = this.data.cartList;
    var SuperMarketList = this.data.SuperMarketList;
    for (let i = 0; i < cartList.length; i++) {
      const cartItem = cartList[i];
      for (let j = 0; j < SuperMarketList.length; j++) {
        const goodsItem = SuperMarketList[j];
        if (cartItem.goodsId == goodsItem.goodsId) {
          SuperMarketList[j].num = cartItem.num;
          break;
        }
      }
    }
    this.setData({
      SuperMarketList: SuperMarketList
    })
  },
  // 当在商品数量变化时
  onStepperChange(event) {
    console.log("onStepperChange event", event);
    let index = event.currentTarget.dataset.index;
    var SuperMarketList = this.data.SuperMarketList;
    var cartList = this.data.cartList;
    SuperMarketList[index].num = event.detail;
    // 当商品的选购数量改变时，同步购物车的数量
    // var SuperMarketList = this.data.SuperMarketList;
    var tag = 0;
    for (let j = 0; j < cartList.length; j++) {
      if (SuperMarketList[index].goodsId == cartList[j].goodsId) {
        cartList[j].num = SuperMarketList[index].num;
        tag++;
        break;
      }
    }
    if (tag == 0) {
      cartList.push(SuperMarketList[index])
    }
    const uniqueCartList = cartList.filter((item, index, self) => {
      return index === self.findIndex(obj => obj.goodsId === item.goodsId) && item.num > 0;
    });
    this.setData({
      SuperMarketList: SuperMarketList,
      cartList: uniqueCartList,
      cartLength: uniqueCartList.length
    })
    this.onImageClick();
  },
  // 当在购物车数量变化时
  onCartStepperChange(event) {
    console.log("onCartStepperChange event", event);
    let index = event.currentTarget.dataset.index;
    var cartList = this.data.cartList;
    cartList[index].num = event.detail;
    const uniqueCartList = cartList.filter((item, index, self) => {
      return item.num > 0;
    });
    // 当购物车中的数量改变时，同步商品的下标
    var SuperMarketList = this.data.SuperMarketList;
    for (let j = 0; j < SuperMarketList.length; j++) {
      if (cartList[index].goodsId == SuperMarketList[j].goodsId) {
        SuperMarketList[j].num = cartList[index].num;
        break;
      }
    }
    this.setData({
      cartList: uniqueCartList,
      SuperMarketList: SuperMarketList
    })
    this.onImageClick();
  },

  

  delCondition(event) {
    // 处理删除商品的逻辑，这里需要根据实际情况完善，比如从列表移除、更新数据等
    const id = event.currentTarget.dataset.id;
    console.log('要删除的商品id:', id);
  },

  // 购物车弹窗关闭时触发的函数，用于隐藏购物车弹窗
  closeCartPopup() {
    this.setData({
      cartPopupShow: false // 将 cartPopupShow 的值设置为 false，隐藏购物车弹窗
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // console.log("wx.getStorageSync('userInfo').userId", wx.getStorageSync('userInfo').userId)
    this.getAppointmentCampList()
    this.setSuperMarketListNum()
  },

  onShow() {
    this.getAppointmentCampList()
    this.setSuperMarketListNum()
    // this.getLeaseOrderInfo()
  },

  // 点击购物车图标触发的函数，用于显示购物车弹窗
  onShowToCheckout() {
    console.log("显示购物车")
    this.setData({
      cartPopupShow: true // 将 cartPopupShow 的值设置为 true，使购物车弹窗显示出来
    });
  },
})